package com.mvc.controller;

import hbm.Marcas;
import hbm.MarcasDAO;
import hbm.Mercaderia;
import hbm.MercaderiaDAO;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class MercaderiaController extends HttpServlet {

	/**
	 * 
	 */
	public class MercMarca {

		private String mercaderia;
		private String marca;

		public String getMarca() {
			return marca;
		}

		public String getMercaderia() {
			return mercaderia;
		}

		public void setMarca(String marca) {
			this.marca = marca;
		}

		public void setMercaderia(String mercaderia) {
			this.mercaderia = mercaderia;
		}

	}

	private static final long serialVersionUID = 1L;

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Mercaderia> listaMercaderia = new MercaderiaDAO()
						.findAll();
				request.getSession().setAttribute("listadoMercaderia",
						listaMercaderia);
				response.sendRedirect("./jsp/eliminarMercaderia.jsp");
			} else {
				String idMercaderia = request.getParameter("idMercaderia");
				Mercaderia mercaderia = new Mercaderia();
				mercaderia.setId(Integer.parseInt(idMercaderia));
				Session session = new MercaderiaDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(mercaderia);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoMercaderia.jsp");
			}
		}

		if (opcion != null && opcion.equals("mercaderia")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				Mercaderia mercaderia = new Mercaderia();
				String nombreMercaderia = request
						.getParameter("txtdescripcion");
				String codigoMercaderia = request.getParameter("txtcodigo");
				Integer idMarca = Integer.parseInt(request
						.getParameter("idMarcas"));
				Marcas marcaSeleccionado = new MarcasDAO().findById(idMarca);
				mercaderia.setMarcas(marcaSeleccionado);
				mercaderia.setDescripcion(nombreMercaderia);
				mercaderia.setCodigo(codigoMercaderia);

				Session session = new MercaderiaDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(mercaderia);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoMercaderia.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new MercaderiaDAO().getSession();

			List<Mercaderia> listaMercaderia = new MercaderiaDAO().findAll();
			// List<Marcas> listaMarcas = new ArrayList<Marcas>();
			List<MercMarca> listaMercaderiaMarca = new ArrayList<MercMarca>();

			Iterator itr = listaMercaderia.listIterator();
			if (listaMercaderia.size() != 0) {
				while (itr.hasNext()) {
					MercMarca mm = new MercMarca();
					Mercaderia mer = (Mercaderia) itr.next();
					mm.setMercaderia(mer.getDescripcion());
					Marcas idMarcas = mer.getMarcas();
					Marcas marcasIndex = new MarcasDAO().findById(idMarcas
							.getId());
					mm.setMarca(marcasIndex.getNombre());
					// listaProveedor.add(proveedorIndex);

					listaMercaderiaMarca.add(mm);
				}
			}
			request.getSession().setAttribute("listaMercaderiaMarca",
					listaMercaderiaMarca);
			session.close();
			response.sendRedirect("./jsp/mantenimientoMercaderia.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Mercaderia> listaMercaderia = new MercaderiaDAO()
						.findAll();
				request.getSession().setAttribute("listadoMercaderia",
						listaMercaderia);
				response.sendRedirect("./jsp/seleccionMercaderia.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idMercaderia = Integer.parseInt(request
					.getParameter("idMercaderia"));
			Mercaderia mercaderiaSeleccionada = new MercaderiaDAO()
					.findById(idMercaderia);
			request.getSession().setAttribute("idMercaderiaSeleccionada",
					mercaderiaSeleccionada.getId());
			request.getSession().setAttribute(
					"descripcionMercaderiaSeleccionada",
					mercaderiaSeleccionada.getDescripcion());
			request.getSession().setAttribute("codigoMercaderiaSeleccionada",
					mercaderiaSeleccionada.getCodigo());
			List<Marcas> listaMarcas = new MarcasDAO().findAll();
			request.getSession().setAttribute("listadoMarcas", listaMarcas);
			response.sendRedirect("./jsp/editarMercaderia.jsp");
		}

		if (opcion != null && opcion.equals("listarMercaderia")) {
			List<Marcas> listaMarcas = new MarcasDAO().findAll();
			request.getSession().setAttribute("listadoMarcas", listaMarcas);

			response.sendRedirect("./jsp/ingresoMercaderia.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idMercaderia = Integer.parseInt(request
						.getParameter("idMercaderia"));
				String nombreMercaderia = request
						.getParameter("txtdescripcion");
				String codigoMercaderia = request.getParameter("txtcodigo");
				Mercaderia mercaderiaSeleccionada = new MercaderiaDAO()
						.findById(idMercaderia);
				Integer idMarca = Integer.parseInt(request
						.getParameter("idMarca"));
				Marcas marcaSeleccionado = new MarcasDAO().findById(idMarca);

				mercaderiaSeleccionada.setMarcas(marcaSeleccionado);
				mercaderiaSeleccionada.setDescripcion(nombreMercaderia);
				mercaderiaSeleccionada.setCodigo(codigoMercaderia);
				Session session = new MercaderiaDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(mercaderiaSeleccionada);
				tx.commit();
				session.close();
				List<Mercaderia> listaMercaderia = new MercaderiaDAO()
						.findAll();
				request.getSession().setAttribute("listadoMercaderia",
						listaMercaderia);
				response.sendRedirect("./jsp/mantenimientoMercaderia.jsp");
			}
		}
	}

	/**
	 * Returns information about the servlet, such as author, version, and
	 * copyright.
	 * 
	 * @return String information about this servlet
	 */

}
